/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package memoriavirtual;

/**
 *
 * @author Pedro Freitas
 */
public class CelulaTP {

    private int numPg;
    private boolean M;
    private boolean P;
    private int numQuadro;

    public CelulaTP(int numPg, boolean M, boolean P, int numQuadro) {
        this.numPg = numPg;
        this.M = M;
        this.P = P;
        this.numQuadro = numQuadro;
    }

    public void setCelulaTP(int numPg, boolean M, boolean P, int numQuadro) {
        this.numPg = numPg;
        this.M = M;
        this.P = P;
        this.numQuadro = numQuadro;
    }

    public static void formatEndLogico(String endLogico, int tamanhoEndLogico) {    //acresce zeros à esquerda caso o tamanho dado do endLogico seja menor que o tamanhoEndLogico
        String aux = "";
        for (int i = endLogico.length(); i < tamanhoEndLogico; i++) {
            aux += '0';
        }
        aux += endLogico;
        endLogico = aux;
    }

    public static int numPg(String endLogico, int qtdIDPg) {
        return Integer.parseInt(endLogico.substring(0, qtdIDPg), 2);       // captura o número da página e o converte de binário para inteiro 
    }

    public static int offset(String endLogico, int qtdIDPg) {
        return Integer.parseInt(endLogico.substring(qtdIDPg + 1), 2);       // captura o offset e o converte de binário para inteiro
    }

    public static int endReal(int numQd, int offset, int tamanhoPg) {
        return numQd * tamanhoPg + offset;
    }

    public int getNumPg() {
        return numPg;
    }

    public int getNumQuadro() {
        return numQuadro;
    }

    public boolean isM() {
        return M;
    }

    public void setM() {
        this.M = !this.M;
    }

    public boolean isP() {
        return P;
    }

    public void setP() {
        this.P = !this.P;
    }
}
